#include "point.h"
#include "icell.h"
#include "complex_cubic.h"

#include <stdlib.h>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
#define DIM_COMP 2
#define DIM_POINT 2




const vector<string> Split(string chaine, char separateur)
{
	vector<string> res;
	string::size_type stTemp = chaine.find(separateur);
	while(stTemp != string::npos)
	{
		res.push_back(chaine.substr(0, stTemp));
		chaine = chaine.substr(stTemp + 1);
		stTemp = chaine.find(separateur);
	}
	res.push_back(chaine);
	return res;
} 


int main(int argc, char *argv[])
{
	cout << "====== MAIN ======" << endl;
	
	
	if (argc != 2) 
	{
		cout<<"Les parametres d'entree ne sont pas correct \n"<<endl;
		cout<<"./iCube <LeNomDuFichierDEntree>\n"<<endl;
	}
	else
	{
		ifstream file(argv[1], ios::in);
 
        if(file)
        {       
            cout<< "Ouverture du fichier : " << argv[1] << endl;
           
            //Recupération des données par ligne puis par string
            string line;
            vector<vector<string> > linesVV;
            vector<string> VecStr;
		    while(getline(file, line))
		    {
		            cout << line << endl;
		            linesVV.push_back(Split(line, ' '));
		    }
		    cout<<"Le nombre de ligne :"<<linesVV.size()<<endl;           
            file.close();
            
            
                       
            //On exploite les données collectées
            
            //Creation du complexe cubique
            ComplexCubic<DIM_COMP, DIM_POINT, int> cc ;
			cout<<"Le complexe cubique a été créé\n"<<endl;
            //createComplexCubic(atoi(linesVV[0][0].c_str()), atoi(linesVV[0][1].c_str()));
            
            
            vector<int> nbICell;
            for (int i = 1 ; i < linesVV.size() ; i++) // On saute la premiere ligne car c'est pour le complexe cubique deja cree
            {
            	
            	if (i == 1) //On definit le nombre de icell
            	{
            	
            		cout<<"Il y aura :"<<endl;
            		for (int j = 0 ; j < linesVV[i].size(); j++)
            		{
            			int k = atoi(linesVV[i][j].c_str());
            			nbICell.push_back(k);
            			cout<<k<<" "<<j<<"-cellule(s)"<<endl;
            		}
            	}
            	else//On cré les i-cell
            	{
            		//les points
            		for (int k = 2 ; k < nbICell[0] + 2 ; k++)
            		{
            			//ICell<0, 2, int> ic;
            		}
            	}            	
            }            
        }
        else 
        {
            cout<< "Impossible d'ouvrir le fichier !" << endl;
        }
	}
	
	

	/*
	std::cout << "==== CREATION D'UNE ICELLULE ====" << std::endl;
	ICell<2, 3, float> ic1;
	
	std::cout << "== GetBorderCells ==" << std::endl;
	std::vector<VirtualICell*> icBorderCells = *ic1.GetBorderCells();
	for (int i = 0; i < icBorderCells.size(); i++)
	{
		std::cout << "Etape " << i << std::endl;
		icBorderCells[i]->Display();
	}
	
	std::cout << "== Display ==" << std::endl;
	ic1.Display();
	
	std::cout << std::endl << std::endl;
	std::cout << "=== CREATION D'UN COMPLEXE CUBIQUE ===" << std::endl;
	//ComplexCubic<3, 3, float> cc1;
	//std::cout << "IsValid : " << cc1.IsValid() << std::endl;
	
	//cc1.FindICell(&ic1);
	
	ICell<0, 2, int> ic2;
	//cc1.AddICell(&ic2);
	
	ic1.Remove();
	*/
	
	return 0;
}


